import router from './index'
import { getToken } from '@/util/auth'
import { useUserStore } from '@/store/user'

// 白名单路由
const whiteList = ['/login', '/404']

// 定义并导出设置路由守卫的函数
export function setupRouterGuards() {
  router.beforeEach(async (to, from, next) => {
    const hasToken = getToken()
    const userStore = useUserStore()

    if (hasToken) {
      if (to.path === '/login') {
        // 已登录且要跳转登录页，重定向到首页
        next({ path: '/dashboard' })
      } else {
        // 判断当前用户是否已拉取完user_info信息
        const hasRoles = userStore.roles && userStore.roles.length > 0
        if (hasRoles) {
          // 已获取用户信息，直接放行
          next()
        } else {
          try {
            // 获取用户信息
            await userStore.getInfo()
            // 获取动态路由
            const accessRoutes = await userStore.generateRoutes()
            console.log(accessRoutes)
            // 动态添加可访问路由
            // accessRoutes.forEach(route => {
            //   router.addRoute(route)
            // })
            // 确保addRoute已完成
            // 设置replace: true，这样导航就不会留下历史记录
            // 修复: 只有当不是根路径时才进行重定向
            // if (to.path === '/' || to.path === '/dashboard') {
            //   next() // 如果已经是首页或dashboard，直接放行，避免循环
            // } else {
            //   next({ ...to, replace: true })
            // }
            next()
          } catch (error) {
            // 移除 token 并跳转登录页
            await userStore.resetToken()
            next(`/login?redirect=${to.path}`)
          }
        }
      }
    } else {
      if (whiteList.indexOf(to.path) !== -1) {
        // 在免登录白名单中，直接进入
        next()
      } else {
        // 其他没有访问权限的页面将重定向到登录页面
        next(`/login?redirect=${to.path}`)
      }
    }
  })

  router.afterEach(() => {
    // 路由切换后的处理
  })
}